package br.com.aplic.teste.integracao.entidade;


import java.sql.Timestamp;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

import br.com.aplic.teste.integracao.Entidade;


/**
 * Bean que representa uma solicitação/autorização para pagamentos com valor acima da meta financeira. 
 * @author Renato
 *
 */
@Entity
@Table(name = "tb_autorizacao_excecao")
public class AutorizacaoExcecao implements Entidade{
	
	public static final String strStatus = "status";
	public static final String strSolicitante= "solicitante";
	public static final String strDthCadastro= "dthCadastro";
	public static final String strDscMotivo= "motivo";
	public static final String strAutorizador= "autorizador";
	public static final String strCentroCusto= "centroCusto";
	public static final String strFornecedor= "fornecedor";
	public static final String strTipoAutorizacao= "tipoAutorizacao";
	public static final String strDscAutorizacao= "dscAutorizacao";
	public static final String strDthVencimento= "dthVencimento";
	public static final String strDthAutorizacao= "dthAutorizacao";

	public static final String STATUS_PENDENTE= "P";
	public static final String STATUS_AUTORIZADO= "A";
	public static final String STATUS_REPROVADO= "R";
	
	
	
//	public static final String strUsuario = "usuario";
//	public static final String strDthCadastro = "dthCadastro";
//	public static final String strUnidadeEmpresa = "unidadeEmpresa";

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	
	/**
	 * Status da autorização: APROVADO, PENDENTE ou REPROVADO. 
	 */
	@Column(name="status")
	private String status;
	
	/**
	 * Usuário que fez a solicitação de aprovação.
	 */	
	
	/**
	 * Data e hora de cadastro da solicitação
	 */
	@Column(name="dth_cadastro")
	private Timestamp dthCadastro;
	
	/**
	 * Texto livre onde o usuário informa o motivo da solicitação de aprovação.
	 */
	@Column(name = "dsc_motivo")
	private String motivo;
	
	/**
	 * Usuário responsável por realizar a aprovação
	 */
	@OneToMany(mappedBy = AutorizacaoExcecaoCentroCusto.strAutorizacaoExcecao, fetch=FetchType.LAZY)
	@Cascade(CascadeType.SAVE_UPDATE)
	private List<AutorizacaoExcecaoCentroCusto> centroCusto;
	
	@Column(name = "tipo_autorizacao")
	private String tipoAutorizacao;
	
	@Column(name = "dsc_autorizacao")
	private String dscAutorizacao;
	
	@Column(name = "dth_vencimento")
	private Timestamp dthVencimento;
	
	@Column(name = "dth_autorizacao")
	private Timestamp dthAutorizacao;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public Timestamp getDthCadastro() {
		return dthCadastro;
	}

	public void setDthCadastro(Timestamp dthCadastro) {
		this.dthCadastro = dthCadastro;
	}

	public String getMotivo() {
		return motivo;
	}

	public void setMotivo(String motivo) {
		this.motivo = motivo;
	}

	public List<AutorizacaoExcecaoCentroCusto> getCentroCusto() {
		return centroCusto;
	}

	public void setCentroCusto(List<AutorizacaoExcecaoCentroCusto> centroCusto) {
		this.centroCusto = centroCusto;
	}

	public String getTipoAutorizacao() {
		return tipoAutorizacao;
	}

	public void setTipoAutorizacao(String tipoAutorizacao) {
		this.tipoAutorizacao = tipoAutorizacao;
	}

	public String getDscAutorizacao() {
		return dscAutorizacao;
	}

	public void setDscAutorizacao(String dscAutorizacao) {
		this.dscAutorizacao = dscAutorizacao;
	}

	public Timestamp getDthVencimento() {
		return dthVencimento;
	}

	public void setDthVencimento(Timestamp dthVencimento) {
		this.dthVencimento = dthVencimento;
	}

	public Timestamp getDthAutorizacao() {
		return dthAutorizacao;
	}

	public void setDthAutorizacao(Timestamp dthAutorizacao) {
		this.dthAutorizacao = dthAutorizacao;
	}
	
	
	
}
